package com.scy.algorithm.string;

import java.util.Arrays;

/**
 * @desc: 编写一个函数，其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
 * 不要给另外的数组分配额外的空间，你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
 * 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
 *
 * 示例 1：
 * 输入：['h','e','l','l','o']
 * 输出：['o','l','l','e','h']
 *
 * 示例 2：
 * 输入：['H','a','n','n','a','h']
 * 输出：['h','a','n','n','a','H']
 *
 * 来源：力扣（LeetCode）344
 * 链接：https://leetcode-cn.com/problems/reverse-string
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @program: runbird-leetCode
 * @author: Suocaiyuan
 * @date: 2020-01-12 20:07
 **/
public class ReverseString {

    public void reverseString(char[] s) {
        for (int i = 0; i < s.length - 1; i++) {
            for (int j = s.length - 1 - i; j > i; j--) {
                if (s[i] == s[j]) break;
                char temp = s[i];
                s[i] = s[j];
                s[j] = temp;
                break;
            }
        }
    }

    public void reverseString2(char[] s) {
        if (s == null || s.length < 2) return;
        int left = -1;
        int right = s.length;
        while (++left < --right) {
            char temp = s[left];
            s[left] = s[right];
            s[right] = temp;
        }
    }

    public static void main(String[] args) {
        char[] s = {'h', 'e', 'l', 'l', 'o'};
        ReverseString reverse = new ReverseString();
        reverse.reverseString(s);
        System.out.println(Arrays.toString(s));
    }
}
